package parse

import (
	"encoding/json"
	"io"
	"net/http"
	"ubt-rbac-service/internal/core/logger"
	"ubt-rbac-service/internal/core/validator"
)

// Parse 将请求参数转换成结构体
func Parse(r *http.Request, s interface{}) (interface{}, string) {
	// 读取请求参数
	if req, err := io.ReadAll(r.Body); err == nil {
		// 将请求参数转换成结构体
		if err = json.Unmarshal(req, &s); err == nil {
			// 校验结构体中的参数
			resStr := validator.ValidateStruct(s)
			if resStr == "" {
				// 成功
				return s, ""
			} else {
				// 参数错误
				return nil, resStr
			}
		} else {
			logger.Error("请求参数转换失败。" + err.Error())
			return nil, "对不起，请求参数转换失败，请重试！"
		}
	} else {
		logger.Error("获取请求参数失败。" + err.Error())
		return nil, "对不起，获取请求参数失败，请重试！"
	}
}
